iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0

interface(介面)的好處:

幫助在代碼庫的不同部分之間編寫更多模塊化和解耦的代碼——它可以幫助減少代碼庫不同部分之間的依賴關係並提供鬆散耦合。
例如,想像一個與數據庫層交互的應用程序。如果應用程序使用接口與數據庫交互,那麼它永遠不會知道後台使用的是哪種數據庫。您可以在後台更改數據庫的類型,例如從 arango db 到 mongo db,而應用層無需任何更改,因為它通過 arango db 和 mongo db 都實現的介面與數據庫層交互。

接口可用於在 golang 中實現polymorphism(多型),例如:
不同的國家有不同的計算稅收的方法。這可以通過介面來表示。

type taxCalculator interface{
    calculateTax()
}

現在不同的國家可以有自己的結構並且可以實現calculateTax()方法,使用相同的 calculateTax 方法來計算稅款。

package main

import "fmt"

type taxSystem interface {
	calculateTax() int
}
type indianTax struct {
	taxPercentage int
	income        int
}

func (i *indianTax) calculateTax() int {
	tax := i.income * i.taxPercentage / 100
	return tax
}

type singaporeTax struct {
	taxPercentage int
	income        int
}

func (i *singaporeTax) calculateTax() int {
	tax := i.income * i.taxPercentage / 100
	return tax
}

func main() {
	indianTax := &indianTax{
		taxPercentage: 30,
		income:        1000,
	}
	singaporeTax := &singaporeTax{
		taxPercentage: 10,
		income:        2000,
	}

	taxSystems := []taxSystem{indianTax, singaporeTax}
	totalTax := calculateTotalTax(taxSystems)

	fmt.Printf("Total Tax is %d\n", totalTax)
    // Total Tax is 500

}
func calculateTotalTax(taxSystems []taxSystem) int {
	totalTax := 0
	for _, t := range taxSystems {
		totalTax += t.calculateTax() // 多型
	}
	return totalTax
}

上一篇
Day4. Map,list
下一篇
Day6. Goroutine, sync.WaitGroup
系列文
挑戰typescript+react+golang+graphql18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言